Curso PostgreSQL¶

    Autor: Luis Fernando Apáez Álvarez
    -Curso PyM-
    Clase 1: Creación de bases de datos y tablas
    Fecha: Marzo del 2023









¿Qué significa SQL?¶

  • SQL es un lenguaje de programación utilizado para manejar y manipular bases de datos relacionales. La sigla SQL significa "Structured Query Language" (Lenguaje de Consulta Estructurada, en español).

  • SQL se utiliza para realizar una amplia variedad de operaciones relacionadas con bases de datos, como la creación de tablas, la inserción de datos, la modificación de datos existentes y la eliminación de datos. También se utiliza para realizar consultas de datos, lo que significa recuperar información de una base de datos y mostrarla en una forma organizada.

  • SQL se aplica en una amplia variedad de entornos y aplicaciones, desde pequeñas bases de datos personales hasta grandes sistemas de gestión de datos empresariales. Es un lenguaje muy utilizado en aplicaciones web, ya que las bases de datos se utilizan frecuentemente en el backend (la parte funcional de un programa el cual, usualmente, no vemos) de aplicaciones para almacenar información y proporcionar datos a los usuarios.

  • El conocimiento de SQL es muy valioso para cualquier persona que trabaje en el campo de la informática, especialmente para los desarrolladores y los administradores de bases de datos. También es útil para analistas de datos y científicos que trabajan con grandes conjuntos de datos.

  • Básicamente, una base de datos relacional es un conjunto de tablas vínculadas entre sí. Además, en este curso trabajaremos con PostgreSQL (sistema de gestión de base de datos que nos permite trabajar con el lenguaje SQL) utilizando para ello la interfaz gráfica denominada pgAdmin.

  • PgAdmin es una herramienta de administración y desarrollo de bases de datos para PostgreSQL, la cual proporciona una interfaz gráfica de usuario (GUI) para interactuar con bases de datos PostgreSQL y permite a los usuarios administrar y desarrollar bases de datos PostgreSQL de manera eficiente. Con PgAdmin, los usuarios pueden crear y editar objetos de base de datos, como tablas, índices y funciones almacenadas, así como ver y editar datos de la base de datos. La herramienta también permite a los usuarios ejecutar consultas SQL y visualizar los resultados en diferentes formatos.

    Una vez visto la breve introducción, entremos de lleno a utilizar PostgreSQL.

Creación de una base de datos¶

Una vez que hemos abierto pgAdmin, en la página principal daremos click en Servers, de donde nos aparecerá que el servidor es PostgreSQL 13 (u otro número, dependiendo de la versión que se haya descargado)

Captura1.PNG

De ahí daremos click derecho en Databases, después en create y pulsaremos finalmente en DATABASE...

Captura2.PNG

Nos aparecerá una ventana, lo primero que debemos hacer es colocar el nombre que queremos darle a la base de datos (BD) y podremos colocarle algún comentario descriptivo sobre dicha BD

Captura3.PNG

vemos que hay 6 pestañas en la ventana. Por ahora no indagaremos en lo que se puede hacer en cada una, salvo con la pestaña SQL.

En nuestro caso hemos nombrado la base de datos como CursoPostgres. En la pestaña SQL se encuentra el código SQL con lo cual crearemos nuestra base de datos

Captura4.PNG

donde dicho código se generó en automático al crear la BD como se especificó antes. Luego, daremos click en el botón Save para guardar nuestra base de datos.

La cual ya aparecerá en DATABASES:

Captura5.PNG

Una vez que demos click en CursoPostgres se mostrarán varios elementos de nuestra base de datos

Captura6.PNG

donde la mayaría de ellos se verán en clases posteriores.

La forma en que creamos dicha BD fue mediante las opciones que pgAdmin nos brindó, no obstante también vimos que podemos crear una BD mediante código SQL.

Si nosotros queremos crear una BD utilizando directamente código SQL deberemos abrir una pestaña Query tool en la cual se puede interactuar directamente con código SQL. Para ello seleccionamos cualquier BD, o en su defecto si no hemos creado ninguna BD, seleccionaremos la BD por defecto, la cual se denomina postgres:

sql1.PNG

Después damos click derecho y seleccionamos la opción de Query tool:

sql2.PNG

de modo se se desplegará a la derecha la pestaña:

sql3.PNG

en la cual ya podremos programar en el lenguaje SQL. Así, si deseamos crear una BD utilizamos la sentencia


CREATE DATABASE <<nombre que le queremos dar a la BD>>;

Por ejemplo:

sql4.PNG

de donde:

  1. Código SQL que empleamos para crear una BD con nombre cursoPostgres. Después es necesario seleccionar todo el código para posteriormente ejecutarlo.
  2. Ejecutamos el código SQL seleccionado.
  3. pgAdmin nos arroja un mensaje donde nos dice que la sentencia fue ejecutada exitosamente. Ahí mismo nos estará diciendo cuando cometamos errores en el código. También nos muestra el tiempo que le llevo ejecutar nuestro código.

Podremos ver nuestra BD en la parte de server:

sql5.PNG

Si no se ve nuestra BD, será necesario refrescar, para lo cual te puedes situar en Databases (4), dar click derecho y elegir la opción refresh. Una vez que ya tenemos una BD podemos proseguir, ahora, a la creación de tablas.

Creación de tablas¶

CapturaC2%20%281%29.PNG

Una vez que ya creamos nuestra base de datos nos iremos a la parte que dice Schemas (esquemas)

CapturaC2%20%282%29.PNG

donde en automático se creó el esquema public el cual será en el que trabajaremos. Además podemos ver otras opciones, las cuales representan la materia prima de este curso, es decir, a lo largo del curso abordaremos la creación de tablas, funciones, triggers, procedimientos, manejaremos secuencias, crearemos vistas, etcétera.

Antes de continuar es preciso mencionar que un esquema (schema) hace alusión a la estructura (configuración lógica) de una base de datos, en la cual quedará almacenadas nuestras tablas y demás funcionalidades o elementos que configuremos en la BD.

Continuando, una vez seleccionada la opción de Schemas notamos que en automático se ha creado un esquema público (public) en la BD (así como existen esquemas públicos, existen esquemas privados), el cual será en el que trabajaremos. Lo de público tiene que ver con el acceso que se tiene a dicha configuración, pues, por ejemplo, puede ser que en algún caso no querramos que se modifique la configuración o estructura de la BD, por lo cual sería conveniente que el acceso al esquema de dicha BD sea privado. Una vez seleccionando el esquema público damos click derecho y desplegamos la pestaña de

Query tool. Al desplegar dicha pestaña a partir del esquema público hará que todo lo que hagamos en SQL afectará solo a la BD con la que estamos trabajando (CursoPostgres). De tal manera:

CapturaC2%20%283%29.PNG

Antes de crear nuestra primer tabla es preciso que definamos un proyecto en el cual trabajaremos a lo largo de este curso para que éste vaya tomando forma, pues recordemos que la esencia de trabajar SQL son las bases de datos relacionales, de modo que las tablas que vayamos a crear deberán estar relacionadas entre sí.

Elegimos entonces trabajar con una base de datos referente a una papelería.

Una vez dicho lo anterior consideramos, inicialmente, las siguientes tres tablas:

  • Productos: esta tabla almacenará todos los productos que se venden en la papelería
  • Empleados: esta tabla almacenará todos los empleados de la papelería
  • Ventas: esta tabla almacenará todas las ventas efectuadas en la papelería

Ahora bien, la sintaxis general para crear una tabla es la siguiente


CREATE TABLE <<nombre de la tabla>>(
    <<nombre columna 1>>  <<tipo de dato>>,
    <<nombre columna 2>>  <<tipo de dato>>,
    .
    .
    .
    <<nombre columna n>>  <<tipo de dato>>);

A partir de lo anterior abordamos el siguiente subtema:

Tipo de datos¶

Podemos utilizar datos nativos de PostgreSQL para almacenar nuestros valores. Por ejemplo, si deseamos almacenar un entero como el 7, utilizaremos para ello el tipo de dato INT (integer); si deseamos almacenar un nombre como 'Luis' (note que las cadenas de texto deben ir entre comillas simples) utilizaremos el tipo de dato, por ejemplo, VARCHAR. Así, tendremos gran variedad de tipos de datos de acuerdo a la necesidad de los valores que queramos almacenar.

Para la tabla Productos ocuparemos 4 columnas:

  • nombre_producto: nótese primero que en el nombre de la columna no podemos dejar espacios vacíos, en su lugar nos auxiliamos del guión bajo. Luego, en esta columna pondremos el nombre de los productos de la papelería, así, el tipo de dato adecuado será VARCHAR.
  • cantidad_almacen: nótese que en el nombre de las columnas no ponemos acentos. Luego, en esta columna pondremos la cantidad total de cada producto que se dispone en la papelería. Por ello utilizaremos el tipo de dato INT
  • precio: dado que el precio de un producto puede ser algo como 20.50, utilizaremos el tipo de dato real que hace referencia a los números reales.

La última columna por mencionar es la más importante de todas, que de hecho se debe definir primero, y ésta es independiente del contexto de la tabla. Dicha columna se conoce como un identificar, el cual nos sirve para tener, justamente, un indentificador único para las filas de una tabla. Por ejemplo, si tenemos una tabla que almacena nombres de personas, un posible identificador podría ser el CURP pues éste es único para cada persona (fila de la tabla). Imaginemos que en la tabla Productos tenemos algo como

nombre_producto cantidad_almacen precio
Lápiz Big 20 0.50
Lápiz Pelikan 2 1.00

si bien al colocar la marca del lápiz hemos evitado el siguiente conflicto

nombre_producto cantidad_almacen precio
Lápiz 20 0.50
Lápiz 2 1.00

tenemos que la opción de poner la marca no es la más eficiente, donde el concepto de eficiencia en base de datos es crucial pues recordemos que en la vida real las bases de datos tienes millones de filas.

Así, si tenemos en su lugar un identificador (id) para cada fila podremos manejar sin problemas tablas del estilo:

id_producto nombre_producto cantidad_almacen precio
1 Lápiz 20 0.50
2 Lápiz 2 1.00

lo cual nos permitiría identificar dos tipos de lápiz aunque el nombre sea el mismo. El indetificador que mencionamos antes es muy común de utilizar en las tablas, aunque en algunas otras podemos tener otro tipo de identificadores, por ejemplo el CURP o algún número único asociado para cada fila.

Si bien, con la última versión de la tabla productos seguimos teniendo una tabla que puede ser mejorada, el punto es dar la idea del porqué es importante tener un identificador en la mayoría de las tablas, con lo cual conseguimos un buen manejo de los datos que se almacenan en dicha tabla. Por ende consideraremos la columna:

  • id_producto: identificador único de las filas de la tabla productos. Puede pensarse que el tipo de dato correcto para esta columna es INT, sin embargo hay un tipo de dato que se acopla mejor a los identificadores, este es SERIAL. El tipo de dato SERIAL trae un incremento automático, es decir, cuando ingresemos datos a nuestra tabla no será necesario especificar el id_producto pues se colocará de manera automática, más adelante veremos esto en acción.

Procedemos pues a crear la tabla productos como sigue


CREATE TABLE productos(
    id_productos SERIAL,
    nombre_producto VARCHAR,
    cantidad_almacen INT,
    precio REAL);

y después daremos click en ejecutar (no olvidemos que debemos seleccionar dicho código para posteriormente ejecutarlo).

Así, nuestra tabla productos ha quedado guardada en nuestra base de datos

CapturaC2%20%287%29.PNG

Para las tablas restantes utilizamos el siguiente código:


-- Esto es un comentario :)

-- Definición de la tabla empleados
CREATE TABLE empleados(
    id_empleados SERIAL,
    nombre VARCHAR,
    app VARHCAR,    -- apellido paterno
    apm VARCHAR,    -- apellido materno
    puesto VARCHAR,
    salario REAL    -- note que en la última columna no ponemos una coma al final
    );

-- Definición de la tabla ventas
CREATE TABLE ventas(
    id_ventas SERIAL,
    producto_vendido VARCHAR,
    cantidad INT,
    total REAL,
    empleado VARCHAR    -- empleado involucrado en la venta
);

recordemos que para ejecutar un código SQL debemos de seleccionarlo previamente como se ve en la siguiente imagen

CapturaC2%20%288%29.PNG

y posteriormente seleccionamos la opción de ejecutar.